แรงเสียดทานพื้นฐานในฟิสิกส์เชิงคำนวณเกิดขึ้นเพราะคอมพิวเตอร์แทนค่าจำนวนจริงด้วย การคำนวณเลขทศนิยมแบบลอยตัวในระบบฐานสอง (ฐาน2). แตกต่างจากแนวคิดของมนุษย์ที่ใช้เลขฐานสิบ (ทศนิยม) ฮาร์ดแวร์จัดเก็บค่าในระบบฐานสอง (ไบนารี) ซึ่งทำให้เกิดปรากฏการณ์ การซึมผ่านของความเป็นนามธรรม: จำนวนเศษส่วนทศนิยมง่ายๆ เช่น 0.1 ไม่สามารถแทนค่าได้อย่างแม่นยำ
1. ความจริงของเลขทศนิยมแบบลอยตัว
Go มีประเภทหลักสองประเภทสำหรับจำนวนจริง: float32 และ float64. เมื่อใช้รูปแบบการประกาศตัวแปรแบบย่ออย่างเช่น price := 0.0, Go จะใช้ค่าเริ่มต้นเป็น float64. ประเภทเหล่านี้เป็นเพียงการประมาณค่าของความจริง ไม่ใช่ค่าทางคณิตศาสตร์ที่แน่นอน
2. เรื่องลึกลับของ 0.1
ในระบบฐานสิบ $1/3$ จะได้ผลลัพธ์เป็นเลขทศนิยมที่ซ้ำไปเรื่อยๆ ($0.333...$) ในขณะที่ในระบบฐานสอง ค่า $0.1$ จะกลายเป็น เศษส่วนที่ซ้ำไปเรื่อยๆ แบบไม่มีที่สิ้นสุด. เนื่องจากหน่วยความจำของคอมพิวเตอร์มีจำกัด จึงต้องตัดทอนเศษส่วนนี้ ส่งผลให้เกิดข้อผิดพลาดสะสม ตัวอย่างเช่น $0.1 + 0.2$ จะได้ผลลัพธ์เป็น $0.30000000000000004$ แทนที่จะเป็น $0.3$ อย่างแน่นอน
คำเตือน: อย่าใช้ == ในการเปรียบเทียบเลขทศนิยมแบบลอยตัวในตรรกะของวงจร ด้วยเหตุผลที่ความคลาดเคลื่อนเล็กน้อยเหล่านี้จะทำให้การเปรียบเทียบล้มเหลว